﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace FrbaCommerce.Abm_Empresa
{
    public partial class frm_modificarEmpresa : Form
    {
        private DataRow empresaOriginal;
        private bool razonSocialValido = true;
        private bool telEmpValido = true;
        private bool cuitValido = true;
        private bool camposObligatorios = false;

        public frm_modificarEmpresa(DataGridViewRow empresa)
        {
            InitializeComponent();
            empresaOriginal = (empresa.DataBoundItem as DataRowView).Row;
        }

        private void frm_modificarEmpresa_Load(object sender, EventArgs e)
        {
            //---Cargar TextBox Nombre de Usuario y Contraseña---//
            BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.CommandText = "SELECT USERNAME, PASSWORD FROM LOS_GDDES.USUARIOS " +
                                     "WHERE ID_USUARIO=@id_usuario";
            sqlCommand.CommandType = CommandType.Text;
            sqlCommand.Parameters.AddWithValue("id_usuario", empresaOriginal.Field<Decimal>("ID_USUARIO"));
            DataTable dt_usuario = baseDeDatos.consulta(sqlCommand);
            txt_nombreDeUsuario.Text = dt_usuario.Rows[0][0].ToString();
            txt_contrasenia.Text = dt_usuario.Rows[0][1].ToString();
            //---Cargar TextBox Nombre de Usuario y Contraseña---//

            //---Cargar TextBox---//
            txt_razonSocialEmpresa.Text = empresaOriginal.Field<string>("RAZON_SOCIAL");
            txt_emailEmpresa.Text = empresaOriginal.Field<string>("MAIL");
            txt_telEmpresa.Text = Convert.ToString(empresaOriginal.Field<Decimal>("TELEFONO"));
            txt_dirEmpresa.Text = empresaOriginal.Field<string>("DIRECCION_NOMBRE");
            txt_nroDirEmpresa.Text = Convert.ToString(empresaOriginal.Field<Decimal>("DIRECCION_NRO"));
            if (empresaOriginal.Field<object>("NRO_PISO") != null)
                txt_pisoDirEmpresa.Text = Convert.ToString(empresaOriginal.Field<Decimal>("NRO_PISO"));
            if (empresaOriginal.Field<object>("DEPTO") != null)
                txt_dptoDirEmpresa.Text = empresaOriginal.Field<string>("DEPTO");
            txt_localidadEmpresa.Text = empresaOriginal.Field<string>("LOCALIDAD");
            txt_CPEmpresa.Text = empresaOriginal.Field<string>("COD_POSTAL");
            if (empresaOriginal.Field<object>("CUIT") != null)
                txt_cuitEmpresa.Text = empresaOriginal.Field<string>("CUIT");
            txt_nombreContEmpresa.Text = empresaOriginal.Field<string>("NOMBRE_CONTACTO");
            dtp_fecCreacEmpresa.Text = Convert.ToString(empresaOriginal.Field<DateTime>("FECHA_CREACION"));
            //---Cargar TextBox---//
        }

        private void lbl_cambiarContrasenia_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            frm_cambiarContrasenia frm_cambiarContrasenia = new frm_cambiarContrasenia(empresaOriginal.Field<Decimal>("ID_USUARIO"));
            frm_cambiarContrasenia.ShowDialog();
            this.frm_modificarEmpresa_Load(sender, e);
        }

        private void txt_razonSocialEmpresa_Leave(object sender, EventArgs e)
        {
            validar_razonSocialEmp();
        }

        private void validar_razonSocialEmp()
        {
            if (txt_razonSocialEmpresa.Text == "")
            {
                txt_razonSocialEmpresa.BackColor = Color.Red;
                razonSocialValido = false;
            }
            else if (txt_razonSocialEmpresa.Text == empresaOriginal.Field<string>("RAZON_SOCIAL") && txt_razonSocialEmpresa.Text != "INVAL")
            {
                txt_razonSocialEmpresa.BackColor = Color.White;
                razonSocialValido = true;
            }
            else
            {
                BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
                SqlCommand sqlCommand = new SqlCommand();
                sqlCommand.CommandText = "LOS_GDDES.SP_VALIDAR_EMPRESA_RAZON_SOCIAL";
                sqlCommand.CommandType = CommandType.StoredProcedure;
                sqlCommand.Parameters.AddWithValue("@razon_social", txt_razonSocialEmpresa.Text);
                int razonSocialExistente = baseDeDatos.ejecuta(sqlCommand);

                if (razonSocialExistente > 0)
                {
                    txt_razonSocialEmpresa.BackColor = Color.Red;
                    razonSocialValido = false;
                }
                else
                {
                    txt_razonSocialEmpresa.BackColor = Color.White;
                    razonSocialValido = true;
                }
            }
        }

        private void txt_telEmpresa_Leave(object sender, EventArgs e)
        {
            validar_telEmp();
        }

        private void validar_telEmp()
        {
            if (txt_telEmpresa.Text == "")
            {
                txt_telEmpresa.BackColor = Color.Red;
                telEmpValido = false;
            }
            else if (txt_telEmpresa.Text == Convert.ToString(empresaOriginal.Field<Decimal>("TELEFONO")) && txt_telEmpresa.Text != "-1")
            {
                txt_telEmpresa.BackColor = Color.White;
                telEmpValido = true;
            }
            else
            {
                BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
                SqlCommand sqlCommand = new SqlCommand();
                sqlCommand.CommandText = "LOS_GDDES.SP_VALIDAR_EMPRESA_TELEFONO";
                sqlCommand.CommandType = CommandType.StoredProcedure;
                sqlCommand.Parameters.AddWithValue("@telefono", Convert.ToInt32(txt_telEmpresa.Text));
                int telEmpExistente = baseDeDatos.ejecuta(sqlCommand);

                if (telEmpExistente > 0)
                {
                    txt_telEmpresa.BackColor = Color.Red;
                    telEmpValido = false;
                }
                else
                {
                    txt_telEmpresa.BackColor = Color.White;
                    telEmpValido = true;
                }
            }
        }

        private void txt_cuitEmpresa_Leave(object sender, EventArgs e)
        {
            validar_cuitEmp();
        }

        private void validar_cuitEmp()
        {
            if (txt_cuitEmpresa.Text != "")
            {
                bool cuit_formato_valido = FuncionesUtiles.validateCuit(txt_cuitEmpresa.Text);
                if (txt_cuitEmpresa.Text == empresaOriginal.Field<string>("CUIT") && cuit_formato_valido && txt_cuitEmpresa.Text != "INVAL")
                {
                    txt_cuitEmpresa.BackColor = Color.White;
                    cuitValido = true;
                }
                else if (cuit_formato_valido == true)
                {
                    BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
                    SqlCommand sqlCommand = new SqlCommand();
                    sqlCommand.CommandText = "LOS_GDDES.SP_VALIDAR_EMPRESA_CUIT";
                    sqlCommand.CommandType = CommandType.StoredProcedure;
                    sqlCommand.Parameters.AddWithValue("@cuit", txt_cuitEmpresa.Text);
                    int cuitEmpExistente = baseDeDatos.ejecuta(sqlCommand);

                    if (cuitEmpExistente > 0)
                    {
                        txt_cuitEmpresa.BackColor = Color.Red;
                        cuitValido = false;
                    }
                    else
                    {
                        txt_cuitEmpresa.BackColor = Color.White;
                        cuitValido = true;
                    }
                }
                else
                {
                    txt_cuitEmpresa.BackColor = Color.Red;
                    cuitValido = false;
                }
            }
            else
            {
                txt_cuitEmpresa.BackColor = Color.Red;
                cuitValido = false;
            }

        }

        //---Validar Campos Obligatorios Completos---//
        private void verificar_campos_obligatorios()
        {
            var camposObligatorios = new List<Control>();
            camposObligatorios.Add(txt_razonSocialEmpresa);
            camposObligatorios.Add(txt_emailEmpresa);
            camposObligatorios.Add(txt_telEmpresa);
            camposObligatorios.Add(txt_dirEmpresa);
            camposObligatorios.Add(txt_nroDirEmpresa);
            camposObligatorios.Add(txt_localidadEmpresa);
            camposObligatorios.Add(txt_CPEmpresa);
            camposObligatorios.Add(txt_cuitEmpresa);
            camposObligatorios.Add(txt_nombreContEmpresa);
            camposObligatorios.Add(dtp_fecCreacEmpresa);

            if (camposObligatorios.All<Control>(campos => campos.Text != "" && campos.Text != "INVAL" && campos.Text != "-1"))
                this.camposObligatorios = true;
            else
                this.camposObligatorios = false;

            var camposIncompletos = camposObligatorios.FindAll(campos => (campos.Text == "" || campos.Text == "INVAL" || campos.Text == "-1"));
            camposIncompletos.ForEach(campos => campos.BackColor = Color.Red);
            var camposCompletos = camposObligatorios.FindAll(campos => campos.Text != "" && campos.Text != "INVAL" && campos.Text != "-1");
            camposCompletos.ForEach(campos => campos.BackColor = Color.White);
        }
        //---Validar Campos Obligatorios Completos---//

        private void btn_guardar_Click(object sender, EventArgs e)
        {
            this.verificar_campos_obligatorios();
            this.validar_razonSocialEmp();
            this.validar_telEmp();
            this.validar_cuitEmp();

            if (razonSocialValido && telEmpValido && cuitValido && camposObligatorios)
            {
                this.actualizar_empresa();
                this.Close();
            }
        }

        private void btn_limpiar_Click(object sender, EventArgs e)
        {
            this.Controls.OfType<GroupBox>().ToList().ForEach(groupBox => groupBox.Controls.OfType<TextBox>().ToList().ForEach(textBox => textBox.Text = String.Empty));
        }

        private void btn_cancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void actualizar_empresa()
        {
            BaseDeDatos baseDeDatos = BaseDeDatos.Instance;
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.CommandText = "LOS_GDDES.SP_MODIFICAR_EMPRESA";
            sqlCommand.CommandType = CommandType.StoredProcedure;
            sqlCommand.Parameters.AddWithValue("@id_empresa", empresaOriginal.Field<Decimal>("ID_EMPRESA"));
            sqlCommand.Parameters.AddWithValue("@razon_social", txt_razonSocialEmpresa.Text);
            sqlCommand.Parameters.AddWithValue("@mail", txt_emailEmpresa.Text);
            sqlCommand.Parameters.AddWithValue("@telefono", Convert.ToInt32(txt_telEmpresa.Text));
            sqlCommand.Parameters.AddWithValue("@direccion_nombre", txt_dirEmpresa.Text);
            sqlCommand.Parameters.AddWithValue("@direccion_nro", Convert.ToInt32(txt_nroDirEmpresa.Text));
            if(txt_pisoDirEmpresa.Text != "")
                sqlCommand.Parameters.AddWithValue("@nro_piso", Convert.ToInt32(txt_pisoDirEmpresa.Text));
            if(txt_dptoDirEmpresa.Text != "")
                sqlCommand.Parameters.AddWithValue("@depto", txt_dptoDirEmpresa.Text);
            sqlCommand.Parameters.AddWithValue("@localidad", txt_localidadEmpresa.Text);
            sqlCommand.Parameters.AddWithValue("@cod_postal", txt_CPEmpresa.Text);
            sqlCommand.Parameters.AddWithValue("@cuit", txt_cuitEmpresa.Text);
            sqlCommand.Parameters.AddWithValue("@nombre_contacto", txt_nombreContEmpresa.Text);
            sqlCommand.Parameters.AddWithValue("@fecha_creacion", Convert.ToDateTime(dtp_fecCreacEmpresa.Text));
            baseDeDatos.ejecuta(sqlCommand);
        }

        private void txt_telEmpresa_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
                e.Handled = false;
            else if (Char.IsControl(e.KeyChar))
                e.Handled = false;
            else
                e.Handled = true;
        }

        private void txt_nroDirEmpresa_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
                e.Handled = false;
            else if (Char.IsControl(e.KeyChar))
                e.Handled = false;
            else
                e.Handled = true;
        }

        private void txt_pisoDirEmpresa_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
                e.Handled = false;
            else if (Char.IsControl(e.KeyChar))
                e.Handled = false;
            else
                e.Handled = true;
        }

        private void txt_CPEmpresa_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
                e.Handled = false;
            else if (Char.IsControl(e.KeyChar))
                e.Handled = false;
            else
                e.Handled = true;
        }
    }
}
